home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_400 / 422_01 / libcf / isfuns.asm < prev    next >
Encoding:
Assembly Source File  |  1994-03-27  |  2.1 KB  |  98 lines

  1. *
  2. * Test for an ASCII character
  3. *
  4. isascii    LD    #$007F        Range to test
  5.     SJMP    ?4        Perform test
  6. *
  7. * Test for alphanumeric character (0-9, A-Z, a-z)
  8. *
  9. isalnum    LDI    S+        Save return address
  10.     CALL    isdigit        Is it a number?
  11.     PUSHI            Replace
  12.     SJNZ    ?1        Yes, its OK
  13. *
  14. * Test for alphabetic character (A-Z, a-z)
  15. *
  16. isalpha    LDI    S+        Save ret address
  17.     CALL    isupper        Test uppercase
  18.     PUSHI            Replace ret address
  19.     SJNZ    ?1        Yes, its OK
  20. *
  21. * Test for lowercase alphabetic character (a-z)
  22. *
  23. islower    LD    #'az'        Range to test
  24.     SJMP    ?4        Perform test
  25. *
  26. * Test for uppercase alphabetic character (A-Z)
  27. *
  28. isupper    LD    #'AZ'        Range to test
  29.     SJMP    ?4        Perform test
  30. *
  31. * Test for graphic (printable) character
  32. *
  33. isgraph    LD    #$217E        Range to test
  34.     SJMP    ?4        And proceed
  35. *
  36. * Test for hexidecimal digit
  37. *
  38. isxdigit LDI    S+        Save RET address
  39.     LD    #'AF'        Range to test
  40.     CALL    ?4        Test it
  41.     PUSHI            Resave
  42.     SJNZ    ?1        Its OK
  43.     LDI    S+        Get RET address
  44.     LD    #'af'        Range to test
  45.     CALL    ?4        Test ot
  46.     PUSHI            Fix stack
  47.     SJNZ    ?1        Found it
  48. *
  49. * Test for an ASCII digit (0-9)
  50. *
  51. isdigit    LD    #'09'        Range to test
  52. * Test argument against range in ACC
  53. ?4    PUSHA            Save ACC
  54.     LD    4,S        Get argument
  55.     CMPB    1,S        Too LOW?
  56.     ULT            Complete compare
  57.     SJNZ    ?2        Yes, its invalid
  58.     LD    4,S        Get argument
  59.     CMPB    ,S        Too HIGH?
  60.     UGT            Complete compare
  61.     SJNZ    ?2        Too high
  62.     LD    S+        Restore stack
  63. * Complete test by insuring that high bits are zero
  64. ?1    LDB    #1        Return TRUE
  65.     RET
  66. * Return with FALSE value
  67. ?2    LD    S+        Clean stack
  68. ?3    CLR            Get a FALSE
  69.     RET
  70. *
  71. * Test for CONTROL character
  72. *
  73. iscntrl    LD    2,S        Get argument
  74.     CMPB    #$7F        Test for special case
  75.     SJNZ    ?1        Its control
  76.     LD    #$001F        Control code range
  77.     SJMP    ?4        Test for it
  78. *
  79. * Test for a punctuation character
  80. *
  81. ispunct    LD    2,S        Get argument
  82.     PUSHA            Save value
  83.     CALL    isalnum        Alphanumeric?
  84.     LDI    S+        Clean up stack
  85.     SJNZ    ?3        Yes, false
  86. isprint    LD    #$207E        Printable range
  87.     SJMP    ?4        And test for it
  88. *
  89. * Test for a "space" character
  90. *
  91. isspace    LD    2,S        Get argument
  92.     LDI    #?5        Switch table
  93.     SWITCH
  94. ?5    FDB    ?1,' '        Space
  95.     FDB    ?1,9        Tab
  96.     FDB    ?1,10        Newline
  97.     FDB    0,?3        Default - Fail
  98.